perm filename WORDS.F4[NEW,LCS]24 blob sn#519461 filedate 1980-07-01 generic text, type T, neo UTF8
00100	C  WORDS,  NAMEXT, TYPOUT
00200		
00300		SUBROUTINE WORDS
00400		INTEGER PWDS
00500		COMMON R2,JA,RC,J2,R3,R4,R5,R6,R7,X,IA,N
00600		1,Z,J,KN,ISET,KNT,Q(26),JR /PTR/PWDS(1)
00700		1 /LIMIT/LIMIT,ITEM,LL,IS,IX
00800	C  /SCX/ IS ALSO IN SCMSS, NOTBMS, RHYTH, BEAMS, NEWR(IN LOOP.FAI), SCAN.FAI
00900	C **** WHEN JALPHA IS EXTENDED FIX LOOP AT 365 AND SUBR. NEWR(IN LOOP)
01000	C **** AND SUBR. SCMSS, NOTBMS, RHYTH AND BEAMS
01100		COMMON/SCX/ICOM,MINUS,IDOT,IEQ,LPRN,IRPRN,IPLUS,ISTAR,ICOLON,
01200		1 ISEMI,IDBQT,IBLA,IDOL,IPRCNT,IANPR,IAT,INUM,LESS,IGT,IAPOS,
01300		1 IQUES,IEXCLA,LBRK,RBRK,UPAR,DNAR,DBLAR,SLA,XX,ZZ,
01400		1 J4,L,Y,K,RX,RZ,RA,J5  /XRN/RN(1) /ALF/INP(72),ML
01500		COMMON/SCN/KEL,KR,KU,KD,KSLA,NONO(30)
01600	CC	COMMON/SCN/LEL,LR,LU,LD,KSLA,LE,LC,LS,LF,LA,LI,LW
01700		DIMENSION IAZ(26),JALPHA(30)
01800		COMMON/A2Z/LA,LB,LC,LD,LE,LF,LG,LH,LI,LJ,LK,LEL,LM,
01900		1 LN,LO,LP,LQ,LR,LS,LT,LU,LV,LW,LX,LY,LZ
02000		EQUIVALENCE (ICOM,JALPHA),(INP2,INP(2)),(IAZ,LA),(LSQ,JALPHA(23))
02100		DATA LEL/'L'/,LR/'R'/,LU/'U'/,LD/'D'/,LE/'E'/,KSLA/'/'/
02200		1,LC/'C'/,LS/'S'/,LF/'F'/,LA/'A'/,LI/'I'/,LW/'W'/,XFONT/50./
02300		DATA IAZ/'A','B','C','D','E','F','G','H','I','J','K','L','M',
02400		1 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z'/,
02500		1 IBKSL/"561004020100/
02600	C  IBKSL=\   BACKSLASH - NOT USED YET  5/80
02700		DATA JALPHA/',','-','.','=','(',')','+','*',':',';'
02800		1 ,'"',' ','$','%','&','@','#','<','>',1H','?','!'
02900		1 ,"555004020100,"565004020100,"571004020100,"5004020100,
03000		1 "135004020100,'/',"755004020100,"771004020100/
03100	C 1ST 2 BIG NUMS ARE [, ], ↑, ↓, ↔, ... {, }
03200	C                  1/4 1/2 #  b nat.   --- 1/8
03300	C   FOR ENTERING TEXT: T, POS., STF., NT#., SIZE
03400		KNT=-1
03500	C COUNTER FOR SEPARATE TEXT ITEMS.
03600	431	FORMAT(72A1)
03700	131	CALL TYPE
03800	531	DO 31 KN=72,1,-1
03900	31	IF(INP(KN).NE.IBLA)GO TO 33
04000	C  KN=NUM OF CHARACTERS
04100	C  DON'T END WITH '*' IN 'LETTERS' INPUT!!!!!!!!
04200	C  , - . = ( ) + * : ; " BLANK (FONTS) ' --THIS IS ORDER PAST ALPHAB.
04300	C ?[=1/8 NOTE, [=QTR NOTE, ]=HALF NOTE, ↑=#, ↓=b, ↔=NATURAL, 2 SLOTS STILL OPEN
04400	
04500	C  50 &=NON-ITALICS(BDR), 51 @=ITALICS(BDI)
04600	C  48 &&=BDL (LIGHT-FACE)     49 IS STILL FREE ****
04700	C  52 #=RETURN TO PRIMITVE FONT, 53 <=OPEN, 54 >=FILLED. ('=55)
04800	C FRENCH ACCENTS=ACCUTE=64, GRAVE=65, CMFLX=66, UMLT=67, CIDLA=68, 69 =EIGHTH NOTE
04900	C                 <<          >>       $$        %%       ##
05000	33	L=1
05100		RC=0
05200		IF(INP(KN).NE.KSLA)GO TO 333
05300		IF(INP(KN+1).NE.KSLA)GO TO 133
05400	C  TYPE // TO PRINT A SINGLE SLASH.  (NO SPACE BETWEEN!)
05500	333	KN=KN+1
05600		INP(KN)=KSLA
05700	C  SO TRAILING BLANKS ARE DELETED.
05800	133	LL=1
05900		RZ=0 
06000		ISET=IS
06100		IF(R3.LT.1000)GO TO 233
06200		RZ=1
06300		R3=R3-1000.
06400		RC=R3
06500	C  ADD 1000 TO POSITION (R3+1000) FOR CENTERING AT POS. R3.
06600	233	RA=R3
06650		SET=RA
06675	C IF SET = 0 THEN USE SETLET.
06700	C   RA= ADDS UP TOTAL SPACE NEEDED
06800		RX=0
06900	C  FOR SETLET
07000	C******** DASH
07100	368	KA=INP(L)
07200		IF(KA.NE.'?'.AND.KA.NE.'!')GO TO 117
07300	C /??/ = PUT IN LONG DASH TO DIVIDE SYLLABLES.  BUT MUST BE EDITED LATER!!!!!
07400	C /!!/ = PUT IN SHORT DASH TO DIVIDE SYLLABLES.  BUT MUST BE EDITED LATER!!!!!
07500		IF(INP(L+1).NE.KA)GO TO 117
07600		IA=L
07700		L=L+2
07800	217	IF(INP(L).EQ.'/')GO TO 317
07900		L=L+1
08000		IF(L.LT.KN)GO TO 217
08100	317	ML=L
08200		DO 417 N=IA,KN
08300		ML=ML+1
08400		INP(N)=INP(ML)
08500	C GET RID OF /??  AND SLIDE DATA TO LEFT.
08600	417	INP(ML)=IBLA
08700		KN=KN-(L-IA)-1
08800		L=IA
08900	CC	L=L+1
09000	817	RN(IS)=8.
09100		RN(IS+1)=4.
09200		RN(IS+2)=R2
09300		RN(IS+3)=RA-4.
09400		RN(IS+4)=R4
09500		RN(IS+5)=R4
09600		RN(IS+6)=RA
09700		RN(IS+7)=0
09800		RN(IS+8)=0
09900		RN(IS+9)=0
10000		RN(IS+10)=1.
10100		IF(KA.NE.'!')GO TO 917
10200	C NOW SHORT DASHES
10300		RN(IS+7)=1.
10400		RN(IS+10)=2.
10500	917	IS=IS+11
10600		RZ=0
10700		GO TO 1370
10800	C******** DASH
10900	117	RN(IS+1)=16
11000		RN(IS+3)=RA
11100	C  NEXT IS A MAGIC NUMBER FOR SPACING LETTERS.
11200	CC	Y=39.6*RSTJ3
11300	C  RBL IS FOR CONTROL(NON-LETTERS, ETC.) CHARACTERS.
11400		RN(IS+2)=R2
11500		RN(IS+4)=R4
11600		CALL NOZERO(R5)
11700		RN(IS+5)=R5
11800		IF(R5.GE.100)R5=R5-100
11900	C >100 FOR TEXT IN ORCH SCORES TO GO IN ALL SEP. PARTS.
12000	CKK	KK=0
12100		DO 364 J5=6,8
12200		Z=0
12300	CXX	DO 363 J4=1,4
12400		J4=1
12500	361	IA=INP(L)
12600		IF(IA.NE.KSLA)GO TO 365
12700	C  NEG. SPACE IS ENTERED IN P1 FOR EACH "FIRST" ITEM.
12800		IF(INP(L+1).NE.KSLA)GO TO 433
12900	C  TYPE // TO PRINT A SINGLE SLASH.  (NO SPACE BETWEEN!)
13000	CKK	KK=KK+1
13100		L=L+1
13200		GO TO 365
13300	433	J3=J4
13400		DO 367 KA=J5,8
13500		X=99.
13600		DO 366 K=J3,4
13700		Z=Z+X
13800	366	X=X*100.0
13900		RN(IS+KA)=Z
14000		J3=1
14100	367	Z=0
14200		L=L+1
14300	C  L=CHARACTER COUNTER
14400		GO TO 369
14500	365	DO 362 J=1,30
14600		IF(IA.NE.JALPHA(J))GO TO 362
14700	CC	IF(J.NE.21)GO TO 360
14800	C NOW '?'
14900	CC	IF(INP(L+1).NE.LSQ)GO TO 360
15000	C NOW '?[' = EIGHTH NOTE   N=69
15100	CC	L=L+1
15200	CC	J=34
15300	360	N=35+J
15400	C  FOUND A SPECIAL CHARACTER.
15500		IF(N.EQ.65)N=69
15600	C NOW '}' = EIGHTH NOTE   N=69
15700		K=N
15800		IFNT=0
15900		IF(N.LT.48)GO TO 39
16000		IF(N.GT.54)GO TO 39
16100		IF(IA.NE.INP(L+1))GO TO 39
16200	C NEXT FOR DBL CHARS.
16300		GO TO(1,2,3,39,7,4,5)N-47
16400	C FOR FRENCH ACCENTS
16500	1	N=66
16600	CIRCUMFLEX   TYPE $$
16700		GO TO 6
16800	2	N=67
16900	C UMLAUT   TYPE %%
17000		GO TO 6
17100	3	N=48
17200	C &&=BDL40 FONT
17300		GO TO 6
17400	4	N=64
17500	C ACCUTE  TYPE >>
17600		GO TO 6
17700	7	N=68
17800	C CEDILLA  TYPE ##
17900		GO TO 6
18000	5	N=65
18100	C GRAVE  TYPE <<
18200	CC	IF(N.NE.50)GO TO 39
18300	CC	IF(IA.NE.INP(L+1))GO TO 39
18400	6	K=N
18500		L=L+1
18600	C  TYPE && FOR LIGHT-FACE (BDL).  PUSH PTR (L) ALONG 1 MORE.
18700		GO TO 39
18800	362	CONTINUE
18900	38	N=10-(LA-INP(L))/536870912
19000	C   MAGIC NUMBER TO FIND LETTERS
19100		IF(N.LT.10)N=N+7
19200		K=N
19300		IF(KFNT)IFNT=0
19400		IF(N.LT.40)GO TO 39
19500		N=N+28
19600		KFNT=-1
19700	C  TO INITIALIZE AUTOMATIC LOWER CASE SYSTEM.
19800		K=N-60
19900	C  K IS ACTUAL LETTER NUMB. (a=10, ETC.)
20000		IFNT=-1
20100	C LOWER CASE LETTERS ARE 60 .GT. UPPER. A=10, a=70, b=71, etc.
20200	39	L=L+1
20300	C  BLANK=47  =99 WHEN NO MORE CHARS TO COME.
20400	C*********** NEW 12/79 ****** ALSO CHANGE 363 LOOP******************
20500		IF(N.LT.48.OR.N.GT.52)GO TO 392
20600	C SAVE THE FONT CODE
20700		XFONT=N
20800		GO TO 391
20900	392	IF(J4.NE.1)GO TO 391
21000	C SKIP IF FONT CODE OR NOT 1ST CHAR. OF GROUP
21100		IF(RX.NE.0)GO TO 391
21200		IF(RZ.NE.0)GO TO 391
21300	C PUTS FONT CODE AT FIRST OF EACH CHAR. GROUP.
21400		J4=J4+1
21500		Z=XFONT*1000000.
21600	C*******************************************************
21700	391	IF(N.LT.64.OR.N.GT.68)CALL SPACER(K,IFNT,RX,3.32)
21800	CC  63=SLASH     391	IF(N.LT.63.OR.N.GT.68)CALL SPACER(K,IFNT,RX,3.32)
21900	C  NUM↑↑=19.7/5.96  FOR BASIC SPACE PER LETTER.
22000	C  GET SPACE FOR THIS LETTER.  IGNORE ACCENTS (63-68)
22100		X=N
22200		IF(J4.EQ.2)X=X*10000.
22300		IF(J4.EQ.3)X=X*100.
22400		IF(J4.EQ.1)X=X*1000000.
22500	363	Z=Z+X
22600		J4=J4+1
22700		IF(J4.LE.4)GO TO 361
22800	364	RN(IS+J5)=Z
22900	369	RN(IS+9)=RX
23000		RN(IS+10)=RZ
23100		IF(RZ.EQ.0)KNT=KNT+1
23200		IF(RC.NE.0)RN(IS+10)=RC
23300		RC=0
23400	C  FOR CONTINUATION
23500		RA=RA+RX*R5
23600		IF(IA.EQ.KSLA)RA=RA+5
23700	C  SPACES GROUPS DIVIDED BY SLASHES
23800		RX=0
23900	C***	IF(RZ.NE.0)GO TO 370
24000	C  SKIP IF P10=1, REQUIRED FOR CONTINUATION OF TEXT.
24100	C***	IF(IBLANK(IS,7))RZ=-2
24200	C IF LAST CHAR IN P7 IS BLANK RESET WDCNT, GET RID OF P8 AND P9
24300	C***	IF(IBLANK(IS,6))RZ=-3
24400	C ↑↑↑↑ LAST CHAR IN P6=BLNK ZAPS P7 IF NOT NEEDED. RZ=- CHANGES WORDCNT
24500	C***370	RN(IS)=7+RZ
24600	C NOW WILL PUT SIZE INTO P9 ALWAYS.  (FOR CODE 4 DASH CENTERING FEATURE.)
24700	370	IF(RZ.LT.0)RZ=0 
24800	C***370	RN(IS)=7+RZ
24900	       	RN(IS)=7+RZ
25000		IS=IS+10+RZ
25100		RZ=1.
25200		IF(IA.EQ.KSLA)RZ=0
25300	1370	LL=LL+1
25400		PWDS(ITEM+LL)=IS
25500	C  PUT IT IN THE PNTR ARRAY
25600		IF(L.LT.KN)GO TO 368
25700	C   WAS ↑↑↑↑↑↑↑ .LE.    5/22/76
25800	
25900		IX=ITEM+LL-1
26000	C IX IS FOR DASHES
26100		IF(SET.EQ.0)CALL SETLET
26110	C  GOES TO SETLET AUTOMATICALLY IF P3 = 0.
26120	CCC	IF(KNT.GT.0)CALL SETLET
26200	C  GOES TO SETLET AUTOMATICALLY IF MORE THAN ONE SLASH FOUND.
26300		IF(KFNT)IFNT=0
26400		KFNT=0
26500		INP(1)=0
26600	C   SO IT WON'T FIND A COMMAND IN THE MAIN PROG.
26700		END
26800	C  PACKS 4 CHARS/WD, 3 WDS/ITEM.
26900	
27000	CC	SUBROUTINE NAMEXT(JA,NAME,IEXT)
27100		SUBROUTINE DUMMY
27200		COMMON /MKX/MKX(7),PRNL
27300		DIMENSION JA(1),A(5),FM(7)
27400		DATA A/'A1','A2','A3','A4','A5'/,FM(1)/'('/
27500		EQUIVALENCE (A5,A(5)),(FM2,FM(2)),(FM3,FM(3)),(FM4,FM(4)),
27600		1 (FM5,FM(5)),(FM6,FM(6)),(FM7,FM(7)),(A3,A(3))
27700		DO 9 K=2,7
27800	9	FM(K)=' '
27900		ID=0
28000		IA=0
28100		NAME=' '
28200		DO 1 K=20,1,-1
28300		IF(JA(K).EQ.' ')GO TO 1
28400	5	DO 2 L=K-1,1,-1
28500		J=JA(L)
28600		IF(J.NE.' ')GO TO 3
28700		IA=L
28800		GO TO 4
28900	3	IF(J.NE.'.')GO TO 2
29000		ID=L
29100		K=L
29200	C '.' ASSUMES THERE IS AN EXTENSION 
29300		GO TO 5
29400	2	CONTINUE
29500		GO TO 4
29600	1	CONTINUE
29700	C ALL BLANK IF WE GET HERE
29800		RETURN
29900	4	IF(IA.NE.0)GO TO 6
30000		IF(JA(1).EQ.-1)RETURN
30100	C  ↑↑↑ FOR 'RS', 'SA', 'G', ETC. WITH NO NAME FOLLOWING.
30200		IF(ID.NE.0)GO TO 7
30300	C NOW ONLY A NAME IS ON THIS LINE
30400		FM2=A5
30500		FM3=PRNL
30600	C GET LEFT PARENTHESIS
30700		REREAD FM,NAME
30800		GO TO 10
30900	7	FM3=',A1,'
31000		FM2=A(ID-1)
31100		FM4=A3
31200		FM5=PRNL
31300	C  FOUND NAME AND EXTENSION
31400		REREAD FM, NAME,K,IEXT
31500		GO TO 11
31600	6	IF(IA.GT.5)RETURN
31700	C .GT.5 = TOO MUCH IN FRONT OF NAME!!
31800		FM2=A(IA)
31900		FM3=','
32000		IF(ID.NE.0)GO TO 8
32100		FM4=A5
32200		FM5=PRNL
32300	C  FOUND  'WORD', NAME    WORD= SA, RS, GM, ETC.
32400		REREAD FM,K,NAME
32500		GO TO 10
32600	8	FM4=A(ID-IA-1)
32700		FM5=',A1,'
32800		FM6=A3
32900		FM7=PRNL
33000		REREAD FM,K,NAME,K,IEXT
33100	11	CALL LO2UP(IEXT)
33200	10	CALL LO2UP(NAME)
33300		END
33400	
33500		SUBROUTINE TYPOUT
33600		COMMON /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG,
33700		1 JX,ISM,IQ,VX(50),IMP,K,KN,M,MD,IBLA /ALF/INP(72) /IDEV/IDEV
33800		IF(IDEV.NE.5)RETURN
33900		DO 1 KK=72,1,-1
34000	1	IF(INP(KK).NE.IBLA)GO TO 2
34100	2	CALL TYPINT(MODE)
34200		CALL TYPCHR('   ',3)
34300		DO 3  KKK=1,KK
34400	3	CALL TYPCHR(INP(KKK),1)
34500		CALL TYPCRLF
34600		END
34700	
34800		SUBROUTINE PACKX(NAM,KNM)
34900		DIMENSION KNM(5)
35000		DATA KK/128/,LL/"377777777777/,JJ/"2000000000/
35100		1 , MM/"774000000000/
35200		NAM=0
35300		DO 12 K=5,1,-1
35400		NAM=NAM .OR. (KNM(K) .AND. MM)
35500		IF (K.EQ.1)RETURN
35600	17	IF (NAM.GE.0)GO TO 13
35700		NAM = (( NAM .AND. LL)/KK) .OR. JJ
35800		GO TO 12
35900	13	NAM = NAM / KK
36000	12	CONTINUE
36100		RETURN
36200		END
36300	
36400		SUBROUTINE NAMEXT(I,NAME,IEXT)
36500	C FINDS NAME.EXT IN A1 STRING
36600		DIMENSION I(1)
36700	
36800		IF(I(1).NE.-1)GO TO 9
36900	C FIRST PASS UP 'G', 'GM', 'RS', ETC.  (=-1)
37000		DO 1 K=1,72
37100	1	IF(I(K).EQ.' ')GO TO 2
37200	C NOW PASS BLANKS
37300	2	J=72
37400		DO 3 J=K+1,72
37500	3	IF(I(J).NE.' ')GO TO 4
37600	C NOW FOUND START OF WORD (UNLESS ALL BLANKS)
37700	4	IF(J.NE.72)GO TO 5
37800		NAME=' '
37900		RETURN
38000	9	J=1
38100	5	DO 6 K=J,72
38200		IF(I(K).EQ.' ')GO TO 7
38300	C JUMP IF NAME ONLY
38400	6	IF(I(K).EQ.'.')GO TO 8
38500	7	CALL PACKX(NAME,I(J))
38600		RETURN
38700	8	CALL RLOOP(I(61),I(J),K-J)
38800		CALL PACKX(NAME,I(61))
38900		CALL PACKX(IEXT,I(K+1))
39000		END